package model;

import java.util.Stack;
import java.util.Vector;

/**
 * ModelBoardCK est notre implémentaton de ModelBoard, on lui définit une taille pour indiquer le nombre de 'cases' sur le plateau. La pile sera dépiler apres chaque ajout d'une tuile
 * dans la grille.
 * A noter qu'elle possède un attribut de type ModelGrid qui représente la grille.
 * Nous remplissons cette grille de maniere alatoire grace la methode randImage.
 * @author kn - cm
 *
 */
public class ModelBoardCK extends ModelBoard
{
	private ModelGridCK grid;

//	public ModelBoardCK(ModelTileCK firsTile)
//	{
//		
//		super.firstTile =  firstTile;
//		super.tileStack = new Stack<ModelTile>();
//		this.setGrid(new ModelGridCK(Constants.GRIDSIZE));
//	}
	
	public ModelBoardCK(int taille)
	{
		super.tileStack = new Stack<ModelTile>();
		this.setGrid(new ModelGridCK(taille));
	}

	public void setGrid(ModelGridCK grid) {
		this.grid = grid;
	}

	public ModelGridCK getGrid() {
		return grid;
	}
	public String getFirsTileLink() {
		return ((ModelTileCK) firstTile).getLink();
	}
	
	public void setfirstTileImg(int i, int j, AbstractFactoryExpansion expansion)
	{
		super.firstTile = expansion.makeFirstTile();
		this.grid.set(i,j,firstTile);
	}
	
	
	public int getStackSize(){
		return super.tileStack.size();
	}
	
	public Stack<ModelTile> getTileStack() {
		return super.tileStack;
	}
	
	public void fillStack(AbstractFactoryExpansion expansion){
		Vector<ModelTile> temp = expansion.makeTiles();
		while(!temp.isEmpty()){
			super.tileStack.push(randImage(temp));
		}
	}
	
	private ModelTileCK randImage(Vector<ModelTile> vmt){
		int choice = (int) (Math.random() * vmt.size());
		ModelTileCK temp = (ModelTileCK) vmt.get(choice);
		vmt.remove(choice);
		return temp;
	}
	

//	public void setIg(BaseExpansion ig) {
//		this.ig = ig;
//	}
	
//	public int getIncompatibleExpansion()
//	{
//		int index = -1;
//		for(int i = 0; i < expansionList ;)
//	}
}
